package models

import (
	"context"
	"time"
)

// Order 订单表
type Order struct {
	Id            int64     `json:"id" xorm:"pk autoincr"`
	OrderNo       string    `json:"order_no" xorm:"varchar(32) not null comment('订单编号') unique"`
	UserId        int64     `json:"user_id" xorm:"not null comment('用户ID') index"`
	TotalAmount   float64   `json:"total_amount" xorm:"decimal(10,2) not null comment('订单总金额')"`
	PayAmount     float64   `json:"pay_amount" xorm:"decimal(10,2) not null comment('实付金额')"`
	FreightAmount float64   `json:"freight_amount" xorm:"decimal(10,2) not null default 0 comment('运费金额')"`
	Status        int       `json:"status" xorm:"tinyint(1) not null default 0 comment('订单状态：0待付款 1待发货 2待收货 3已完成 4已取消')"`
	PayType       int       `json:"pay_type" xorm:"tinyint(1) not null default 0 comment('支付方式：0未支付 1微信支付 2支付宝')"`
	PayTime       time.Time `json:"pay_time" xorm:"datetime null comment('支付时间')"`
	DeliveryTime  time.Time `json:"delivery_time" xorm:"datetime null comment('发货时间')"`
	ReceiveTime   time.Time `json:"receive_time" xorm:"datetime null comment('收货时间')"`
	AddressId     int64     `json:"address_id" xorm:"not null comment('收货地址ID')"`
	ReceiverName  string    `json:"receiver_name" xorm:"varchar(50) not null comment('收货人姓名')"`
	ReceiverPhone string    `json:"receiver_phone" xorm:"varchar(20) not null comment('收货人电话')"`
	ReceiverAddr  string    `json:"receiver_addr" xorm:"varchar(255) not null comment('收货地址')"`
	Note          string    `json:"note" xorm:"varchar(500) not null default '' comment('订单备注')"`
	UpdateTime    time.Time `json:"update_time" xorm:"not null updated comment('更新时间')"`
	CreateTime    time.Time `json:"create_time" xorm:"not null created comment('创建时间')"`
}

// TableName 表名
func (Order) TableName() string {
	return "order"
}

// OrderFindByIds 根据ID列表查询
func OrderFindByIds(ctx context.Context, ids []int64) (data []*Order, err error) {
	err = getSession(ctx).In("id", ids).Find(&data)
	return
}

// OrderFindOne 根据条件查询单条
func OrderFindOne(ctx context.Context, id int64) (data *Order, err error) {
	data = new(Order)
	_, err = getSession(ctx).ID(id).Get(data)
	return
}
